//
//  HomeViewController.swift
//  ShangHaiWeiBo
//
//  Created by 蔡杰 on 16/2/22.
//  Copyright © 2016年 蔡杰. All rights reserved.
//

import UIKit
import YYModel
import AFNetworking
import SVProgressHUD
/// 微博 Cell 可重用标识符号
private let CZStatusCellID = "CZStatusCellID"
/// 微博提示 Cell 可重用标识符号
private let CZStatusTipCellID = "CZStatusTipCellID"

class HomeViewController: baseViewController {
    
    override func viewDidLoad() {
        
        // 设置刷新控件
        setWard()
        
        // 调用 RootViewController 的 viewDidLoad 函数，会直接调用 loadData
        super.viewDidLoad()
        
        // 注册可重用 cell
        tableView?.registerClass(StatusCell.self, forCellReuseIdentifier: CZStatusCellID)
        tableView?.registerClass(StatusTipCell.self, forCellReuseIdentifier: CZStatusTipCellID)
        
        tableView?.estimatedRowHeight = 100
        
        tableView?.rowHeight = UITableViewAutomaticDimension
        
        tableView?.separatorStyle = .None
        
        // 设置访客视图信息 - 如果用登录成功，访客视图为 nil，什么也不做！
        visitor?.setUpInfo(messageImageName: "关注一些人，回这里看看有什么惊喜")
        
        // 注册网络连接监听
        NSNotificationCenter.defaultCenter().addObserver(
            self,
            selector: "reachabilityChanged",
            name: AFNetworkingReachabilityDidChangeNotification,
            object: nil)
    }
    
    deinit {
        NSNotificationCenter.defaultCenter().removeObserver(
            self,
            name: AFNetworkingReachabilityDidChangeNotification,
            object: nil)
    }
    
    /// 接收到内存警告！
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        
        // On iOS 6.0 it will no longer clear the view by default.
        // 在 iOS 6.0 之后，默认不再清除 view，再 iOS 6.0 之前，收到内存警告后
        // `如果视图当前没有显示`，会被从内存中销毁，下次需要使用的时候，会再次调用 loadView 创建 view
        // 只需要释放能够被再次创建的资源，例如：从网络加载的数据数组
        // 图像的内存管理 SDWebImage 自行管理，会释放内存中的图像，下次使用，会重新从磁盘缓存加载，如果瓷盘缓存没有，下载图片
        
        print("Home 的 window \(self.view.window)")
        // 如果视图当前正在显示，window 不为nil
        // 注意：Swift 中 lazy 的属性 ** 千万不要设置成 nil！！！
        if self.view.window == nil {
            // 1. 清理数组
           
            self.listViewModel.cencelDate()
            // 2. 刷新数据
            self.loadData()
        }
    }
    
    /// 网路连接状态监听方法
    @objc private func reachabilityChanged() {
        // 刷新表格的第一个分组
        self.tableView?.reloadSections(NSIndexSet(index: 0), withRowAnimation: .Automatic)
    }
    
    override func loadData() {
        
        // 1. 判断是否是上拉刷新，如果上拉刷新动画启动，认为是上拉刷新
        let isPullup = refreshControl?.isPullupRefresh ?? false
        
        // 显示刷新控件
        refreshControl?.beginRefreshing()
       
        listViewModel.loadStatus(isPullup) { (isSuccessed) -> () in
            
            // 结束刷新
            self.refreshControl?.endRefreshing()
            
            if !isSuccessed{
            
                SVProgressHUD.showInfoWithStatus("您的网络不给力")
            }
            
            // 刷新数据
            self.tableView?.reloadData()
        }
        
        }
    
        
    
    
    // MARK: - 私有属性
    private lazy var listViewModel = StatusListViewModel()

}
// extension 本身是对本类的一个扩展，方法的优先级相对较低，本质上，应该不隶属于本类
// MARK: - UITableViewDataSource
// Redundant conformance of 'HomeViewController' to protocol 'UITableViewDataSource'
// 如果父类已经遵守协议，子类不用再次遵守协议，否则会报 重复遵守协议 错误
extension HomeViewController {
    
    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 2
    }
    /// 重写数据源方法
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
        // 分组 0 对应的是提示 cell，如果（网络连接没有）需要提示，才返回 1
        if section == 0 {
            return AFNworkTools.sharedTools.reachable ? 0 : 1
        }
        
        // 分组 1 对应正常的微博 cell
        return listViewModel.statusList.count
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        // 分组 0 对应的是提示 cell
        if indexPath.section == 0 {
            return tableView.dequeueReusableCellWithIdentifier(CZStatusTipCellID, forIndexPath: indexPath)
        }
        
        // 分组 1，对应正常的微博 Cell
        let cell = tableView.dequeueReusableCellWithIdentifier(CZStatusCellID, forIndexPath: indexPath) as! StatusCell
        
        
        //cell.textLabel?.text = "\(status.id) \(status.text)"
       cell.viewModel = listViewModel.statusList[indexPath.row]
        
        return cell
    }
}
